Typically, an Error Correcting Code (ECC) is implemented within a channel itself and not on a shared basis. Because the ECC is not implemented on a shared basis, replication of code occurs between devices that use some form of an ECC. Each channel builds a correct data/ECC block before sending the block to the memory controller to be stored. Building the correct data/ECC block prior to sending the block to the memory controller typically requires each device to have large internal memories in order to store all the data/ECC to be written to, or read with correction from, the external memory. As a result, the design decision is often made to not include ECC on some channels where the cost/benefit trade-off is less.
Another existing technique implements a memory that is wider than the data width so that the ECC bits are stored as part of a data word. The wider memory solution is often implemented as a shared solution available to all channels accessing the memory device. The wider memory technique has a disadvantage of increased cost, both in terms of money and physical space.
It would be desirable to have a solution to protect the data in a standard memory device that is only as wide as the data. In addition, it would be desirable to have a solution that may be shared between multiple channels accessing the memory device. It would be further desirable to have a solution that may be utilized by each channel using the memory device without making any significant changes to the channels.